package pe.gob.servir.apps.censodirectivo.ejb.service;

import java.util.List;

import javax.ejb.Remote;

import pe.gob.servir.apps.censodirectivo.excepcion.ServiceExcepcion;
import pe.gob.servir.apps.censodirectivo.model.bean.AreaInteres;
import pe.gob.servir.apps.censodirectivo.model.bean.BusquedaDirectivo;
import pe.gob.servir.apps.censodirectivo.model.bean.DatoAcademico;
import pe.gob.servir.apps.censodirectivo.model.bean.DirectivoPublico;
import pe.gob.servir.apps.censodirectivo.model.bean.ExperienciaLaboral;
import pe.gob.servir.apps.censodirectivo.model.bean.JefeInmediato;
import pe.gob.servir.apps.censodirectivo.model.bean.MensajeRespuesta;
import pe.gob.servir.apps.censodirectivo.model.bean.Organo;
import pe.gob.servir.apps.censodirectivo.model.bean.PuestoEspecifico;
import pe.gob.servir.apps.censodirectivo.model.bean.UnidadOrganica;

@Remote
public interface DirectivoPublicoServiceRemote {

	DirectivoPublico obtenerPorId(Long id);
	
	MensajeRespuesta registrarAreaInteres(AreaInteres areaInteres) throws ServiceExcepcion;
	
	MensajeRespuesta editarAreaInteres(AreaInteres areaInteres) throws ServiceExcepcion;
	
	MensajeRespuesta registrarExperienciaLaboral(ExperienciaLaboral experienciaLaboral) throws ServiceExcepcion;
	
	MensajeRespuesta editarExperienciaLaboral(ExperienciaLaboral experienciaLaboral) throws ServiceExcepcion;
	
	MensajeRespuesta eliminarExperienciaLaboral(ExperienciaLaboral experienciaLaboral) throws ServiceExcepcion;

	MensajeRespuesta actualizaDirectivoPublico(DirectivoPublico directivoPublico) throws ServiceExcepcion;

	MensajeRespuesta registrarDatosAcademicos(DatoAcademico datoAcademico) throws ServiceExcepcion;
	
	MensajeRespuesta editarDatosAcademicos(DatoAcademico datoAcademico) throws ServiceExcepcion;
	
	MensajeRespuesta eliminarDatosAcademicos(DatoAcademico datoAcademico) throws ServiceExcepcion;
	
	MensajeRespuesta registarDirectivoPublico(DirectivoPublico directivoPublico) throws ServiceExcepcion;
	
	List<DirectivoPublico> filtrarListaDirectivoPublico(BusquedaDirectivo busquedaDirectivo) throws ServiceExcepcion;
	
	MensajeRespuesta ampliarCensoDirectivoPublico(DirectivoPublico directivoPublico, BusquedaDirectivo busquedaDirectivo, String tipoAmpliacion) throws ServiceExcepcion;
	
	MensajeRespuesta habilitarDirectivosPublicos(DirectivoPublico directivoPublico, BusquedaDirectivo busquedaDirectivo) throws ServiceExcepcion;
	
	List<DirectivoPublico> buscarDirectivoPorId(Long id) throws ServiceExcepcion;
	
	List<DatoAcademico> filtrarListaDatosAcademicos(DirectivoPublico directivoPublico, long tipoDatoAcademicoId) throws ServiceExcepcion;
	
	List<ExperienciaLaboral> filtrarListaExperienciaLabora(DirectivoPublico directivoPublico, long tipoExperienciaLaboralId) throws ServiceExcepcion;
	
	List<AreaInteres> filtrarListaAreaInteres(DirectivoPublico directivoPublico, long prioridad, long areaInteresId) throws ServiceExcepcion;

	MensajeRespuesta activarInactivarDirectivo(long idDirectivoPublico,	String tipo) throws ServiceExcepcion;
	
	MensajeRespuesta actualizarDeclaracion(long idDirectivoPublico) throws ServiceExcepcion;
	
	List<Organo> listarTodosOrganos(Organo organo) throws ServiceExcepcion;
	
	List<JefeInmediato> listarTodosJefeInmediato(JefeInmediato jefeInmediato) throws ServiceExcepcion;
	
	List<PuestoEspecifico> listarTodosPuestoEspecifico(PuestoEspecifico puestoEspecifico) throws ServiceExcepcion;
	
	List<UnidadOrganica> listarTodosUnidadOrganica(UnidadOrganica unidadOrganica) throws ServiceExcepcion;
	
	MensajeRespuesta registrarOrgano(Organo organo) throws ServiceExcepcion;
	
	MensajeRespuesta registrarJefeInmediato(JefeInmediato jefeInmediato) throws ServiceExcepcion;
	
	MensajeRespuesta registrarPuestoEspecifico(PuestoEspecifico puestoEspecifico) throws ServiceExcepcion;
	
	MensajeRespuesta registrarUnidadOrganica(UnidadOrganica unidadOrganica)	throws ServiceExcepcion;
	
	MensajeRespuesta editarOrgano(Organo organo) throws ServiceExcepcion;
	
	MensajeRespuesta editarJefeInmediato(JefeInmediato jefeInmediato) throws ServiceExcepcion;
	
	MensajeRespuesta editarPuestoEspecifico(PuestoEspecifico puestoEspecifico) throws ServiceExcepcion;
	
	MensajeRespuesta editarUnidadOrganica(UnidadOrganica unidadOrganica) throws ServiceExcepcion;
	
	Organo obtenerPorIdOrgano(long id) throws ServiceExcepcion;
	
	JefeInmediato obtenerPorIdJefeInmediato(long id) throws ServiceExcepcion;
	
	PuestoEspecifico obtenerPorIdPuestoEspecifico(long id) throws ServiceExcepcion;
	
	UnidadOrganica obtenerPorIdUnidadOrganica(long id) throws ServiceExcepcion;
	
	MensajeRespuesta calculaPorcentajeAvance(DirectivoPublico directivoPublico) throws ServiceExcepcion;
}
